package org.agile4j.patterns.observer.newspaper;

import java.util.ArrayList;
import java.util.List;

/**
 * 目标对象, 作为被观察者
 * @author user
 *
 */
public class Subject {

	/**
	 * 用来保存注册的观察者对象, 也就是报纸的订阅者
	 */
	private List<Observer> readers = new ArrayList<Observer> () ;
	
	/**
	 * 报纸的读者需要向报社定于, 先要注册
	 * @param reder 报纸的读者
	 * 
	 */
	public void attach(Observer reder){
		readers.add(reder) ;
	}
	
	/**
	 * 报纸的读者可以取消订阅
	 * @param reder 报纸的读者
	 * 
	 */
	public void detach(Observer reder){
		readers.remove(reder) ;
	}
	
	/**
	 * 当每期报纸印刷出来后,就要迅速主动的被送到读者手中
	 * 相当于通知读者, 让他们知道
	 */
	protected void notifyObserver(){
		for (Observer reader : readers){
			reader.update(this);
		}
	}
	
}
